/**
 * Created whit IntelliJ IDEA.
 * Description：
 * User：ZHONGCHEN
 * Date:2022-04-05
 * Time:10:30
 */

import java.util.Scanner;

/**
 * 762. 二进制表示中质数个计算置位
 * 给你两个整数 left 和 right ，在闭区间 [left, right] 范围内，统计并返回 计算置位位数为质数 的整数个数。
 * 计算置位位数 就是二进制表示中 1 的个数。
 */
public class TestDemo {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int n = scanner.nextInt();
            int m = scanner.nextInt();
            System.out.println(countPrimeSetBits(n, m));
        }
    }

    public static int countPrimeSetBits(int left, int right) {
        int ans = 0;
        for (int i = left; i <= right; i++) {
            //num=该数字二进制写法中1的个数
            int num = binaryNum(i);
            //num是否为质数
            boolean flag = primeNumber(num);
            //若是则ans++
            if (flag) {
                ans++;
            }
        }
        return ans;
    }

    private static boolean primeNumber(int num) {
        if (num == 1) {
            return false;
        }
        for (int i = 2; i <= Math.sqrt(num); i++) {
            if (num % i == 0) {
                return false;
            }
        }
        return true;
    }

    private static int binaryNum(int i) {
        int count = 0;
        for (int j = 0; j < 32; j++) {
            if (((i >> j) & 1) == 1) {
                count++;
            }
        }
        return count;
    }
}
